package com.learn.criminalintent.database

import androidx.room.TypeConverter
import java.util.Date
import java.util.UUID

/**
 * 创建类型转换器
 * Room能直接在后台SQLite数据库表里存储基本类型数据，但遇到其他数据类型就会有问题。Crime类要 靠Date和UUID对象支持。
 * 但Room默认不知道该如何存储这些数据类型。这就需要采取一定措施来转换这 些数据类型，让Room能正确存储和读取它们。
 *
 * 为了让Room知道该如何做数据类型转换，你需要指定一个类型转换器（type converter）。
 * 类型转换器会告 诉Room如何转换要保存的特定类型的数据。
 * 要完成Date和UUID的数据类型转换，需要四个分别用 @TypeConverter注解的函数——每种数据类型两个，
 * 一个用来告诉Room如何转换成可保存的数据类型，另 一个用来告诉Room如何再恢复成原来的数据类型。
 */
class CrimeTypeConverters {

    @TypeConverter
    fun fromDate(data: Date): Long? {
        return data?.time
    }

    @TypeConverter
    fun toDate(millisSinceEpoch: Long?): Date? {
        return millisSinceEpoch?.let { Date(it) }
    }

    @TypeConverter
    fun fromUUID(uuid: UUID?): String? {
        return uuid?.toString()
    }

    @TypeConverter
    fun toUUID(uuid: String?): UUID? {
        return UUID.fromString(uuid)
    }
}